var AudioManager = require('geoAudioManager');
/**
 * 动画效果道具，比如五星，可以有各种得分效果。
 * 将他们组合在一起可以构成例如五星评分显示器。
 */
cc.Class({
    extends: cc.Component,

    properties: {

        anim: {
            default: null,
            type: cc.Animation,
            tooltip: '用于播放效果的动画主体'
        },

        noScoreClipIndex: {
            default: -1,
            tooltip: '用于未得分的动画效果'
        },

        getScoreClipIndex: {
            default: -1,
            tooltip: '从未得分到得分的过程效果'
        },

        scoreClipIndex: {
            default: -1,
            tooltip: '得分后的动画表现'
        },

        scoreSFX: {
            default: null,
            type: cc.AudioClip,
            tooltip:'得分时的音效'
        },

        loseSFX:{
            default:null,
            type:cc.AudioClip,
            tooltip:'丢分时的音效'
        },

        state: {
            default: false,
            tooltip: '当前效果状态（得分/未得分）'
        }

    },

    // LIFE-CYCLE CALLBACKS:
   
    start() {
        this.presetState(this.state);
    },

    // update (dt) {},

    /**
     * 是否设置未得分状态
     * @param {bool} b 是否设置未得分状态
     */
    setState(b, useAnim) {
        useAnim = (useAnim === false)?false:true;
        // 设置状态
        this.state = b;
        //
        var clipIndex = -1;
        if (b === true) {
            // 启动得分状态
            clipIndex = this.getScoreClipIndex;
            // 播放得分音效
            if(useAnim === true)
            AudioManager.Singleton.playSFX(this.scoreSFX);
        } else {
            clipIndex = this.noScoreClipIndex;
            // 播放丢分音效
            if (useAnim === true)
            AudioManager.Singleton.playSFX(this.loseSFX);
        }
        // 如果索引小于0，就直接返回，维持原有动画效果
        if (clipIndex < 0)
            return;
        // 获取动画名称
        var clips = this.anim.getClips();
        var clip = clips[clipIndex];
        // 播放动画
        var startTime = (useAnim === true)?0:clip.duration;
        this.anim.play(clip.name, startTime);
    },
    /**
     * 与设置状态，无动画
     * @param {boolean} b 
     */
    presetState(b) {
        this.setState(b, false);
    }
});
